import { PropType } from 'vue';
import type { BasicPagingListParams } from '@/apis/basicModel';
import { VxeTableProps } from '@xfchenju/vxe-table';
import type { VxeColumnProps } from '@xfchenju/vxe-table';
import { ColumnSettingTypeEnum } from '@/components/CPageTable';

export type LoadDataParams = BasicPagingListParams;

export const tableProps = {
  // 行数据的 Key
  rowKey: {
    type: String,
    default: 'id'
  },
  // 是否有全边框
  border: {
    type: Boolean,
    default: false
  },
  // 是否使用dataSource
  useDataSource: {
    type: Boolean,
    default: false
  },
  // 表格data
  dataSource: {
    type: Array as PropType<any[]>,
    default: () => {
      return [];
    }
  },
  // 数据加载方法，必须为Promise，返回值必须包含 record/total
  loadData: {
    type: Function as PropType<CTableProps['loadData']>,
    default: undefined
  },
  // 分页器配置
  pagination: {
    type: [Object, Boolean] as PropType<boolean | any>,
    default: () => {
      return true;
    }
  },
  // 是否立即执行接口
  immediate: {
    type: Boolean,
    default: true
  },
  // 是否需要复选框
  selection: {
    type: Boolean,
    default: false
  },
  // 是否展示 FooterBar
  isShowFooterBar: {
    type: Boolean,
    default: true
  },
  // vxe-table option
  extraTableOption: {
    type: Object as PropType<Partial<VxeTableProps>>,
    default: () => {
      return {};
    }
  },
  /**
   * 行高size
   */
  cellHeightSize: {
    type: String as PropType<LineSizeType>,
    default: 'default'
  },
  /**
   * 是否有折叠菜单
   */
  hasCollapse: {
    type: Boolean,
    default: true
  },
  /**
   * 搜索时行的rowKey，如nodeNo
   */
  searchRowKey: {
    type: String,
    default: 'nodeNo'
  },
  /**
   * 搜索时行的rowParentKey（指向父节点的key，如parentNodeNo）
   */
  searchRowParentKey: {
    type: String,
    default: 'parentNodeNo'
  },
  /**
   * 搜索时行的ROOT_PARENT_VALUE（根节点的parenNodeNo的值，如'-1'）
   */
  searchRootParentValue: {
    type: [String, Number],
    default: '-1'
  },
  /**
   * 表格字段配置
   */
  tableFieldsSetting: {
    type: Array as PropType<TableFieldsSettingType[]>,
    default: () => {
      return [];
    }
  }
};

export interface CTableProps {
  // 行数据的 Key
  rowKey?: string;
  // 是否全边框
  border?: boolean;
  // 是否使用dataSource
  useDataSource?: boolean;
  // 表格data
  dataSource?: any[];
  // 数据加载方法
  loadData?: (params: LoadDataParams) => Promise<any>;
  // 分页器配置
  pagination?: boolean | any;
  // 是否立即请求接口
  immediate?: boolean;
  // 是否需要复选框
  selection?: boolean;
  // vxe-table option
  extraTableOption?: any;
  /**
   * 行高size
   */
  cellHeightSize?: LineSizeType;
  /**
   * 是否有折叠菜单
   */
  hasCollapse?: boolean;
  /**
   * 搜索时行的rowKey，如nodeNo
   */
  searchRowKey?: string;
  /**
   * 搜索时行的rowParentKey（指向父节点的key，如parentNodeNo）
   */
  searchRowParentKey?: string;
  /**
   * 搜索时行的ROOT_PARENT_VALUE（根节点的parenNodeNo的值，如'-1'）
   */
  searchRootParentValue?: string | number;
  /**
   * 列表字段配置
   */
  tableFieldsSetting?: TableFieldsSettingType[];
}

export type LineSizeType = 'small' | 'default' | 'large';

/**
 * 表格字段配置
 */
export interface TableFieldsSettingType extends VxeColumnProps {
  key?: string;
  /**
   * body的插槽名称
   */
  slot?: string;
  /**
   * header的插槽名称
   */
  headerSlot?: string;
  /**
   * header的tips文案
   */
  titleTips?: string;
  /**
   * 是否需要文字超出隐藏
   * NOTE 如果不设置overflow = false，默认为undefined并增加列的header和body文字超出隐藏并显示tooltip
   */
  overflow?: boolean;
  /**
   * 列字段显示配置项
   */
  columnSettingConfig?: ColumnSettingConfigType;
  /**
   * 表头分组
   */
  children?: TableFieldsSettingType[];
  /**
   * 是否显示列，仅在enabled为false时优先不显示列
   * 优先级大于 columnSettingConfig
   */
  enabled?: boolean;
}

/**
 * 列字段显示配置项
 */
export interface ColumnSettingConfigType {
  /**
   * 默认是否展示
   */
  enabled: boolean;
  /**
   * 表格列字段配置 类型
   */
  type?: keyof typeof ColumnSettingTypeEnum;
}
